'use strict';

function PlusHelper() {
    //////////////////////////////////////////////////////////////
    // 增加补充函数
    Date.prototype.Format = function (fmt) { //author: meizz   
        var o = {
            "M+": this.getMonth() + 1,                 //月份   
            "d+": this.getDate(),                    //日   
            "h+": this.getHours(),                   //小时   
            "m+": this.getMinutes(),                 //分   
            "s+": this.getSeconds(),                 //秒   
            "q+": Math.floor((this.getMonth() + 3) / 3), //季度   
            "S": this.getMilliseconds()             //毫秒   
        };
        if (/(y+)/.test(fmt))
            fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
        for (var k in o)
            if (new RegExp("(" + k + ")").test(fmt))
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        return fmt;
    }
}



//////////////////////////////////////////////////////////////
// 加载后自动执行
(function () {
    console.info(`-----------------------------------------------`);
    PlusHelper();
    console.info(`开始加载 ${(new Date()).Format("hh:mm:ss.S")}`);

    window.funcGroup = NewFunctionGroup();
    console.info(`加载完成 ${(new Date()).Format("hh:mm:ss.S")}`);

})();

function NewFunctionGroup() {
    return {
        // 加载后初始化
        HgProcessInit: async function () {
            //alert(`测试hgProcess funcGroup ${(new Date()).Format("hh:mm:ss.S")}`);

            // 设置脚本本次无需更新，一直使用1天(默认启动后10s刷新一次)
            window.refreshTime = 1000*3600*24;
            //window.refreshTime = 5000;//5s

            // 找到工具栏，用于信息显示
            var toolbar = $(".main-filters-wrapper");
            if (toolbar.length == 0) {
                return;
            }

            // 找到表格，用于插入显示信息
            var tableform = $(".ant-table-tbody");
            if (tableform.length == 0) {
                return;
            }

            // 找到表格，用于插入显示信息
            var placeholder = $(".ant-table-placeholder");
            if (placeholder.length == 0) {
                return;
            }
            placeholder[0].style.display="none"
            
            // 原色DBE7E7
            // 通过颜色保证只有一次运行
            if (toolbar[0].style.backgroundColor == 'gray') {
                return;
            }
            // 更高背景颜色
            toolbar[0].style.backgroundColor = 'gray';

            var displayBtn = document.createElement("button");
            displayBtn.onclick=window.funcGroup.dispayPlusData;
            displayBtn.style.backgroundColor="yellow";
            displayBtn.textContent="加载中，约20s";
            toolbar[0].append(displayBtn);
            var tick = 19;
            var btnInterval = setInterval(function() {
                displayBtn.textContent=`加载中，约${tick--}s`;
            },1000);

            // 刷新获取所有数据
            await this.refreshData();
            
            // 填充数据到表格
            this.refreshPage(tableform[0]);

            clearInterval(btnInterval);
            displayBtn.textContent="点击显示或隐藏";
            window.mydata.show = true;
        },
        // 显示与隐藏
        dispayPlusData:function () {
            let displaystatus = "";
            if (window.mydata.show == true) {
                window.mydata.show = false;
                displaystatus = "none";
            }
            else{
                window.mydata.show = true;
                displaystatus = "";
            }
            window.mydata.appendChildElements.forEach(element => {
                element.style.display = displaystatus;
            });
        },
        // 请求数据
        refreshData: async function () {
            ////////////////////////////////清空并初始化
            // 未领取
            window.mydata.未领取 = [];
            // 逾期
            window.mydata.已逾期 = [];
            // 已领取
            window.mydata.已领取 = [];

            // 我的，当月，批改历史
            window.mydata.当月 = [];

            // 我的，上一月，批改历史
            window.mydata.上一月 = [];

            // 我的，上二月，批改历史
            window.mydata.上二月 = [];
            
            /////////////////////////////////请求刷新
            // 用户名
            window.mydata.user = await window.funcGroup.awaitGet(`https://izhiqun.com/api/web/v1/user/info/?project=boss&platform=pc`);
            window.mydata.user = window.mydata.user.data;

            // 未领取
            window.mydata.unclaim = await window.funcGroup.awaitGet(`https://izhiqun.com/api/v1/correct/tasks/?page=1&page_size=100&sku=pm&group_id=&taskhour_id=&status=unclaim&platform=pc`);
            window.mydata.unclaim = window.mydata.unclaim.data.tasks;

            // 已领取
            window.mydata.claim = await window.funcGroup.awaitGet(`https://izhiqun.com/api/v1/correct/tasks/?page=1&page_size=10000&sku=pm&group_id=&taskhour_id=&status=claim&platform=pc`);
            window.mydata.claim = window.mydata.claim.data.tasks;

            //////////////////////////////////日期换算
            var date = new Date();
            date.setDate(1);
            var curMonth = date.Format("MM.");
            console.log(`当月 ${curMonth}`);

            var date2 = date;
            date2.setMonth(date.getMonth() > 0 ? date.getMonth() - 1 : 11);
            var lastMonth = date2.Format("MM.");
            console.log(`上月 ${lastMonth}`);

            var date3 = date;
            date3.setMonth(date2.getMonth() > 1 ? date2.getMonth() - 1 : 11);
            var lastlastMonth = date3.Format("MM.");
            console.log(`上上月 ${lastlastMonth}`);


            //////////////////////////////////填充            
            // 未领取
            window.mydata.未领取 = window.mydata.unclaim;

            // 处理取回数据
            window.mydata.claim.forEach(element => {
                if (element.review_user == window.mydata.user.name) {
                    if (element.remain_time != "完成") {
                        // 已领取
                        window.mydata.已领取.push(element);
                    }
                    if (element.remain_time.indexOf("-")>-1) {
                        // 已逾期
                        window.mydata.已逾期.push(element);
                    }
                    if (element.date.indexOf(curMonth) != -1) {
                        // 我的，当月，批改历史
                        window.mydata.当月.push(element);
                     }
                    if (element.date.indexOf(lastMonth) != -1) { 
                        // 我的，上一月，批改历史
                        window.mydata.上一月.push(element);
                    }
                    if (element.date.indexOf(lastlastMonth) != -1) { 
                        // 我的，上二月，批改历史
                        window.mydata.上二月.push(element);
                    }
                }
            });
        },
        // 刷新当前页面显示
        refreshPage:function (table) {
            window.mydata.appendChildElements = [];
            // 未领取
            window.mydata.appendChildElements.push(window.funcGroup.createTableTitleLine(`未领取`));
            window.mydata.未领取.forEach(element => {
                window.mydata.appendChildElements.push(window.funcGroup.createTableDataLine(element));
            });
            // 已逾期
            window.mydata.appendChildElements.push(window.funcGroup.createTableTitleLine(`已逾期`));
            window.mydata.已逾期.forEach(element => {
                window.mydata.appendChildElements.push(window.funcGroup.createTableDataLine(element));
            });
            // 已领取
            window.mydata.appendChildElements.push(window.funcGroup.createTableTitleLine(`已领取`));
            window.mydata.已领取.forEach(element => {
                window.mydata.appendChildElements.push(window.funcGroup.createTableDataLine(element));
            });

            // 我的，当月，批改历史
            window.mydata.appendChildElements.push(window.funcGroup.createTableTitleLine(`我的，当月，批改历史`));
            window.mydata.当月.forEach(element => {
                window.mydata.appendChildElements.push(window.funcGroup.createTableDataLine(element));
            });

            // 我的，上一月，批改历史
            window.mydata.appendChildElements.push(window.funcGroup.createTableTitleLine(`我的，上一月，批改历史`));
            window.mydata.上一月.forEach(element => {
                window.mydata.appendChildElements.push(window.funcGroup.createTableDataLine(element));
            });

            // 我的，上二月，批改历史
            window.mydata.appendChildElements.push(window.funcGroup.createTableTitleLine(`我的，上二月，批改历史`));
            window.mydata.上二月.forEach(element => {
                window.mydata.appendChildElements.push(window.funcGroup.createTableDataLine(element));
            });

            // 统一刷新到页面中
            window.mydata.appendChildElements.forEach(element => {
                table.append(element);
            });
        },
        // 创建小标题空白行
        createTableTitleLine:function (title) {
            let dataline = `<td title="999999" class="ant-table-cell ant-table-cell-ellipsis" style="text-align: center;" colspan="13">${title}</td>`;
            let tempNode = document.createElement('tbody');
            tempNode.innerHTML = (dataline);
            return tempNode.firstChild;
        },
        // 创建数据行
        createTableDataLine:function (element) {
            if (!element) {
                return;
            }
            
            let id = element.id;
            let 产品线 = element.group.sku;
            let 社群名称 = element.group.title;
            let 作业课时 = element.taskhour.title;
            let 组号 = element.team.index;
            let 组名 = element.team.name;
            let 作业提交日 = element.date;
            let 剩余批改时间 = element.remain_time;
            let 点评人 = element.review_user;
            let 作业标签 = (element.tags && element.tags.length >0 )?element.tags[0].title : "未领取";
            let 作业批改状态 = element.status;
            if(element.status == "review"){
                作业批改状态 = "已完成"
            }
            else if (element.status == "claim") {
                作业批改状态 = "已领取"
            }
            else if (element.status == "expire") {
                作业批改状态 = "已逾期"
            }
			else if(element.status == "unclaim"){
                作业批改状态 = "未领取"
			}
            let 作业批改状态en = `status-${element.status}`;
            let 操作 = "查看";
            let 备注 = element.remark;
            let dataline = 
            `<tr data-row-key="${id}" class="ant-table-row ant-table-row-level-0">
                <td title="${id}" class="ant-table-cell ant-table-cell-ellipsis" style="text-align: center;">${id}</td>
                <td title="${产品线}" class="ant-table-cell ant-table-cell-ellipsis" style="text-align: center;">${产品线}</td>
                <td title="${社群名称}" class="ant-table-cell ant-table-cell-ellipsis" style="text-align: center;">
                    ${社群名称}</td>
                <td title="${作业课时}" class="ant-table-cell ant-table-cell-ellipsis" style="text-align: center;">${作业课时}</td>
                <td class="ant-table-cell" style="text-align: center;">${组号}</td>
                <td title="${组名}" class="ant-table-cell ant-table-cell-ellipsis" style="text-align: center;">${组名}</td>
                <td title="${作业提交日}" class="ant-table-cell ant-table-cell-ellipsis" style="text-align: center;">${作业提交日}</td>
                <td title="${剩余批改时间}" class="ant-table-cell ant-table-cell-ellipsis" style="text-align: center;">${剩余批改时间}</td>
                <td title="${点评人}" class="ant-table-cell ant-table-cell-ellipsis" style="text-align: center;">${点评人}</td>
                <td title="${作业标签}" class="ant-table-cell ant-table-cell-ellipsis" style="text-align: center;">${作业标签}</td>
                <td class="ant-table-cell" style="text-align: center;"><span class="td-status-span"><span
                            class="td-status-span-btn ${作业批改状态en}">${作业批改状态}</span></span></td>
                <td class="ant-table-cell td-opt td-stop-row-click" style="text-align: center;"><span class="td-opt-span"><a
                            class="text" href="https://izhiqun.com/web/group/588/task/homework/${id}?slug=all" target="_blank"
                            rel="noopener noreferrer">${操作}</a></span></td>
                <td title="${备注}" class="ant-table-cell ant-table-cell-ellipsis" style="text-align: center;">${备注}</td>
            </tr>`;
            
            let tempNode = document.createElement('tbody');
            tempNode.innerHTML = (dataline);
            return tempNode.firstChild;
        },
        // 工具方法：将post封装成promise，可以用过await调用
        awaitPost: function (url, data) {
            return new Promise((resolve) => {
                $.post(url, data, function (data) {
                    var jsondata = data;
                    if (jsondata) {
                        resolve(jsondata);
                    }
                });
            });
        },
        // 工具方法：将Get封装成promise，可以用过await调用
        awaitGet: function (url) {
            return new Promise((resolve) => {
                $.get(url, function (data) {
                    var jsondata = data;
                    if (jsondata) {
                        resolve(jsondata);
                    }
                });
            });
        },
    }
}

